using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Logical.Comercial;
using Marlimer.Logical.Universal;
using Marlimer.Common.EntidadesGrilla;

namespace Marlimer.Comercial.Distribucion
{
    public partial class frm_SecuenciaLogica : Form
    {
        private lcom_Modulo lcom_modulo = new lcom_Modulo();
        private lcom_Ruta lcom_ruta = new lcom_Ruta();
        private luni_Ubigeo luni_ubigeo = new luni_Ubigeo();
        private lcom_Cliente lcom_Cliente = new lcom_Cliente();


        public frm_SecuenciaLogica()
        {
            InitializeComponent();
        }

        private void frm_SecuenciaLogica_Load(object sender, EventArgs e)
        {
            this.Location = new Point(0, 0); 
            ConfigurarRejilla();
            CargarCombos(); 
        }

        private void ConfigurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("nsecuencia", "Secuencia", 90, false, true, DataGridViewContentAlignment.MiddleRight, "0.0000"));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("ccod_cli", "Codigo", 50, true, true, DataGridViewContentAlignment.MiddleRight, ""));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("craz_soc", "Razon Social", 150, true, true, DataGridViewContentAlignment.MiddleLeft, ""));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("cdir_ent", "Direccion", 150, true, true, DataGridViewContentAlignment.MiddleLeft, ""));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("cabre_ubi", "Distrito", 90, true, true, DataGridViewContentAlignment.MiddleLeft, ""));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("flg_modificado", "", 90, true, false, DataGridViewContentAlignment.MiddleLeft, ""));
            

            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            gridResultados.AllowUserToDeleteRows = false;  
            gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        private void CargarCombos()
        {
            Util.LlenarDataCombo(lcom_modulo.getDTModulo(), cboModulo, true);   
        }

        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void cboGeneral_KeyPress(object sender, KeyPressEventArgs e)
        {
            Util.validaEnter(e.KeyChar);
        }

        private void txtGeneral_Leave(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            String value = "";
            int valuenum = -1;
            String nametxt = txt.Name;
            object newval = null;

            if (txt.Text.Trim() != "")
            {
                value = txt.Text;
                valuenum = Convert.ToInt32(Util.ToValor(txt.Text));
            }

            switch (nametxt)
            {
                case "txtCodModulo":
                    {
                        cboModulo.SelectedValue = value;
                        newval = cboModulo.SelectedValue;
                        break;
                    }
            }
            txt.Text = Convert.ToString(newval);
        }

        private void cboGeneralDT_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbo = (ComboBox)sender;
            String valor = "";
            String namecbo = cbo.Name;
            //validamos que el indice seleccionado sea mayor a -1
            if (cbo.SelectedIndex > -1 && cbo.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                valor = Convert.ToString(cbo.SelectedValue);
            }

            switch (namecbo)
            {
                case "cboModulo":
                    {
                        txtCodModulo.Text = valor;
                        //si el valor es diferente de vacio entonces consultar datos
                        if (valor != "")
                        {
                            DataTable dtMod = lcom_modulo.consultaModulo(valor, 0, "", 0, 0);
                            if (dtMod.Rows.Count > 0)
                            {
                                int ccod_ruta = Convert.ToInt32(Util.getValueDT("ccod_ruta", 0, dtMod));
                                txtRuta.Text = Convert.ToString(ccod_ruta);
                                txtDiaVisita.Text = Convert.ToString(Util.getValueDT("cdia_visita", 0, dtMod));
                                //consultar la ruta 
                                DataTable dtRut = lcom_ruta.consultaRuta(ccod_ruta, 0, 0, "", 0);
                                if (dtRut.Rows.Count > 0)
                                {
                                    txtVendedor.Text = Convert.ToString(Util.getValueDT("vendedor", 0, dtRut));
                                }
                            }
                        }
                        else
                        {
                            txtRuta.Text = "";
                            txtVendedor.Text = "";
                            txtDiaVisita.Text = ""; 
                        }
                        break;
                    }
            }
        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }

        private void txtCodModulo_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = Convert.ToChar(e.KeyChar.ToString().ToUpper());
            e.Handled = Util.validaTecla(e.KeyChar, "AlfaNumerico", ((TextBox)sender).Text, true);
        }

        private void tstComandos_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = -1;
            if (sender.GetType().Name == "ToolStrip")
            {
                indice = tstComandos.Items.IndexOf(e.ClickedItem);
            }
            else
            {
                indice = mnuComandos.DropDownItems.IndexOf(e.ClickedItem);    
            }

            switch (indice)
            {
                case 0:     //nuevo
                    {
                        nuevo();
                        break;
                    }
                case 1:
                    {
                        buscar();
                        break; 
                    }
                case 2:
                    {
                        guardar(); 
                        break; 
                    }
            }
        }

        private void guardar()
        {
            //verificar de que hayan registros
            if (gridResultados.Rows.Count>0)
            {
                //preguntar si realmente se desea guardar
                if (MessageBox.Show("Seguro que desea guardar?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {

                    Boolean encontro = false;
                    List<InfoClienteActMasivo> clies = new List<InfoClienteActMasivo>();

                    //recorrer la grilla para saber si hay algo
                    for (int i = 0; i < gridResultados.Rows.Count; i++)
                    {
                        //solo filtrar los que tienen el flag de modificado
                        if (Convert.ToInt32(gridResultados.Rows[i].Cells["flg_modificado"].Value) == 1)
                        {
                            InfoClienteActMasivo cli = new InfoClienteActMasivo();
                            cli.ccod_cli = Convert.ToInt32(gridResultados.Rows[i].Cells["ccod_cli"].Value);
                            cli.nsecuencia = Convert.ToDouble(Util.ToValor(gridResultados.Rows[i].Cells["nsecuencia"].Value.ToString()));
                            clies.Add(cli);
                            encontro = true;
                        }
                    }

                    if (encontro)
                    {
                        resulMsgError resul = lcom_Cliente.actualizaSecuenciaCliente(clies);
                        if (resul.resul)
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            nuevo();
                        }
                        else
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    else
                    {
                        MessageBox.Show("No hay registros para guardar.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar el codigo de modulo a cambiar", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cboModulo.Focus();  
            }
        }

        private void nuevo()
        {
            //limpiar la grilla
            gridResultados.Rows.Clear();
  
            //limpiar controles
            CargarCombos();
            txtRuta.Text = "";
            txtVendedor.Text = "";
            txtDiaVisita.Text = "";
            tlbGuardar.Enabled = false;
            mnuGuardar.Enabled = false;
            tlbBuscar.Enabled = true;
            mnuBuscar.Enabled = true; 
 
            txtCodModulo.Focus();
        }

        private void buscar()
        {
            //buscar los clientes coincidentes
            //primer se debe haber ingresado los datos para el filtr
            if (Convert.ToString(cboModulo.SelectedValue) != "")
            {
                DataTable dt = lcom_Cliente.getListaClienteSecuencia(Convert.ToString(cboModulo.SelectedValue));
                if (dt.Rows.Count > 0)
                {
                    int ccod_cli;
                    double nsecuencia;
                    String craz_soc;
                    String cdir_ent;
                    String cabre_ubi;

                    //recorrer e ir mostrando
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        ccod_cli = Convert.ToInt32(Util.getValueDT("ccod_cli", i, dt));
                        craz_soc = Convert.ToString(Util.getValueDT("craz_soc", i, dt));
                        cdir_ent = Convert.ToString(Util.getValueDT("cdir_ent", i, dt));
                        cabre_ubi = Convert.ToString(Util.getValueDT("cabre_ubi", i, dt));
                        nsecuencia = Convert.ToDouble(Util.getValueDT("nsecuencia", i, dt));
                        gridResultados.Rows.Add(nsecuencia, ccod_cli, craz_soc, cdir_ent, cabre_ubi, 0);
                    }
                    //activar los botones de guardado
                    tlbGuardar.Enabled = true;
                    mnuGuardar.Enabled = true;
                    tlbBuscar.Enabled = false;
                    mnuBuscar.Enabled = false; 
                }
                else
                {
                    MessageBox.Show("No se encontraron registros", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                MessageBox.Show("Debe ingresar un dato para poder realizar la busqueda", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            
        }

        private void gridResultados_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            
            object value = gridResultados.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
            if (!Util.IsNumeric(value.ToString()) && e.ColumnIndex == 0)
            {
                MessageBox.Show("Debe ingresar un valor numerico.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                gridResultados.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 1;
            }
            else
            {
                gridResultados.Rows[e.RowIndex].Cells["flg_modificado"].Value = 1;
                gridResultados.CurrentRow.DefaultCellStyle.BackColor = Color.Beige;
            }
            
        }

        private void gridResultados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (gridResultados.CurrentRow != null)
            {
                if (Convert.ToInt32(gridResultados.CurrentRow.Cells["flg_modificado"].Value) == 1)
                {
                    gridResultados.CurrentRow.DefaultCellStyle.BackColor = Color.Beige;     
                }
            }
        }

    }
}